home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1995-04-15 | 2.5 KB | 80 lines |
- DEFINITION MODULE Terminator;
- (*
- Diese Modul verwaltet eine Liste von "Abschlussprozeduren". Sie sollen
- bei Beendigung eines Programms ausgeführt werden, um allozierte Resourcen
- freizugeben, oder allgemein "Aufräumarbeiten" auszuführen.
-
- Die Prozeduren werden in umgekehrter Reihenfolge des Einfügens ausgeführt.
-
- Die Prozduren dieses Modul manipulieren eine globale Liste. Während eine
- Prozedur abgearbeitet wird, darf keine andere Prozedur dieses Moduls aus-
- geführt werden. Dies ist bei den meisten Anwendungen garantiert. Eine
- Ausnahme bilden Programme die selbst Tasks oder Prozesse kreieren, bzw.
- Interruptroutinen installieren. Falls in verschiedenen Tasks, oder in
- einer Interruptroutine und im normalen Programmablauf Prozeduren diese
- Moduls verwendet werden, muss z.B. mit Hilfe von Forbid/Permit bzw.
- Disable/Enable für den gegenseitigen Ausschluss gesorgt werden.
- *)
-
- FROM SYSTEM IMPORT ADDRESS,CAST;
-
- TYPE
- UserData=ADDRESS;
- (*
- Vom Benutzer frei zu verwenden.
- *)
-
- TermProc=PROCEDURE(UserData{0});
- (*
- Format einer Abschlussprozedur.
- *)
-
- Reference;
- (*
- Identifiziert eine oder mehrere Abschlussprozeduren.
- *)
-
- CONST
- newReference=CAST(Reference,NIL);
-
- PROCEDURE Add(tp:TermProc; ud:UserData; ref:Reference):Reference;
- (*
- Fügt die Prozedur "tp" zusammen mit dem Wert von "ud" in die Liste ein.
- Beim späteren Aufruf der Prozedur, wird sie den Wert von "ud" als Parameter
- erhalten.
-
- Wenn "ref" den Wert "newReference" enthält, dann wird "Add" selbst eine
- Referenz kreieren und als Resultat zurückgeben. Diese Referenz kann
- bei einem Aufruf von "Remove" oder "Use" oder "Add" wiederverwendet
- werden.
-
- Es kann auch eine zuvor von "Add" erhaltene Referenz dem Parameter "ref"
- zugewiesen werden. Dadurch können Gruppen von Abschlussprozeduren gebildet
- werden, die dann von "Remove" und "Use" gesamthaft verwendet werden.
-
- Falls Add nicht korrekt ausgeführt werden kann, wird als Resultat der
- Wert "newReference" zurückgegeben.
- *)
-
- PROCEDURE Remove(VAR ref:Reference);
- (*
- Entfernt alle Prozeduren, die der Referenz "ref" zugeteilt wurden, aus
- der Liste.
-
- BEACHTE
- Nach diesem Aufruf ist die übergebene Referenz nicht mehr gültig. Die
- Prozedur setzt den Parameter auf "newReference".
- *)
-
- PROCEDURE Use(VAR ref:Reference);
- (*
- Ruft alle Prozeduren die der Referenz "ref" zugeteilt wurden auf, und
- entfernt sie dann aus der Liste.
-
- BEACHTE
- Nach diesem Aufruf ist die übergebene Referenz nicht mehr gültig. Die
- Prozedur setzt den Parameter auf "newReference".
- *)
-
- END Terminator.
-